package hu.bme.iit.szlab4.continuity;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Fal extends Palyaelem {

	int meret;

	// Tukor
	@Override
	public boolean metszette(Jatekos j) {
		// Input beolvasasanak elokeszitese
		BufferedReader reader = new BufferedReader(new InputStreamReader(
				System.in));
		;
		String sor = "inic";

		// -------------------------------------
		// Meghivjuk a j:Jatekos getMeret metodusat
		Main.tabszam++;

		System.out.println(Main.getTabok() + "-->");
		// A hivasok szamat azert a Main hivaszam valtozoja alapjan irjuk ki,
		// mert az opt-ok miatt az nem allando.
		System.out.println(Main.getTabok() + "1." + Main.hivasszam
				+ ".1. Hivott metodus: j.getMeret():int");

		// A konkret metodushivas
		j.getMeret();
		System.out.println(Main.getTabok() + "<- -");
		Main.tabszam--;

		// ---------------------------------------
		// Meghivjuk a j:Jatekos getAktKoord metodusat
		Main.tabszam++;

		System.out.println(Main.getTabok() + "-->");
		// A hivasok szamat azert a Main hivaszam valtozoja alapjan irjuk ki,
		// mert az opt-ok miatt az nem allando.
		System.out.println(Main.getTabok() + "1." + Main.hivasszam
				+ ".2. Hivott metodus: j.getAktKoord():Pozicio");

		// A konkret metodushivas
		j.getAktKoord();
		System.out.println(Main.getTabok() + "<- -");
		Main.tabszam--;

		System.out
				.println(Main.getTabok()
						+ "Visszateresi ertek: Megadja, hogy a Jatekos metszette-e az Falat.");
		System.out
				.println(Main.getTabok()
						+ "Logikai valtozo. Egy egesz szam megadasaval adhato meg, aminek jelentese: 0 - nem, 1 - igen.");
		System.out
				.println(Main.getTabok() + "Adja meg a visszateresi erteket!");
		// Visszateresi ertek bekerese a felhasznalotol.
		int i = 10; // i-t azert 10-es ertekkel inicializaljuk, mert a 0-as es
					// 1-es ertek ertelmezve van a kesobbi logikai valtozo
					// vizsgalatokban
		while ((i != 0) && (i != 1)) {
			try {
				sor = reader.readLine();
				i = Integer.parseInt(sor);
				if ((i != 0) && (i != 1)) {
					throw new Exception();
				}
			} catch (Exception e) {
				// Hibas inputot hibauzenettel es ujboli bekeressel kezeljuk.
				System.out
						.println(Main.getTabok()
								+ "A bevitt visszateresi ertek nem felel meg a megkoteseknek! Ezek a kovetkezok:");
				System.out
						.println(Main.getTabok()
								+ "Egesz szam. 0 vagy 1. Jelentese: 0 - nem, 1 - igen.");
			}
		}
		System.out.println(Main.getTabok() + "Visszateresi ertek: " + i);

		return (i == 1) ? true : false;
	}

	// Tuzko
	@Override
	public boolean interakt(Jatekos j) {
		System.out.println("****************************************");
		System.out.println("Inicializalas.Objektumok letrehozasa.");
		System.out.println("Letrehozott objektum: f:Fal");
		System.out.println("Letrehozott objektum: j:Jatekos");
		System.out.println("****************************************");

		// ezeket csak a teszt miatt hozzuk letre itt, a vegso programban
		// ezek az objektumok mar ekkor letre lesznek hozva.
		Fal f = new Fal();

		// egy valtozo amibe majd a beolvasott valaszokat taroljuk, ha a valasz
		int valasz = 0;

		// egy valtozo amivel megoldjuk az opt/alt-nal felmerulo szamozasi
		// problemat.
		int hivSz = 1;

		// kinullazzuk, hogy biztos megfeleloen hasznaljuk
		Main.tabszam = 0;

		// ----------------------------------------------
		// f.interakt(j) elokeszitese es meghivasa
		System.out.println(Main.getTabok() + "-->");
		System.out.println("1. Hivott metodus: f.interakt(j)\n");
		System.out.println("Vart parameter:\nj: Jatekos referencia\n");

		// ---------------------------------------------------------------
		// f.korrekcio(j) elokeszitese es meghivasa
		Main.tabszam++;
		System.out.println(Main.getTabok() + "-->\n" + Main.getTabok() + "1."
				+ hivSz++ + " Hivott metodus: j.korrekcio(j)\n"
				+ Main.getTabok() + "Vart parameterek:\n" + Main.getTabok()
				+ "j:Jatekos referencia\n");
		f.korrekcio(j);
		System.out.println(Main.getTabok() + "<- -\n");
		Main.tabszam--;

		// f.interakt fuggveny visszaterese, csak false lehet
		System.out
				.println(Main.getTabok()
						+ "Visszateresi ertek: Kimentunk az ajton? Itt csak a nem az elfogadhato valasz!");
		System.out.println(Main.getTabok() + "0 - nem");
		System.out.println(Main.getTabok() + "1 - igen");

		// A felhasznaloi input ellenorzese.
		// CSAK A FALSE-T FOGADJA EL !!
		boolean ok = false;
		while (!ok) {
			try {
				BufferedReader consoleIn = new BufferedReader(
						new InputStreamReader(System.in));
				String stringInt = consoleIn.readLine();
				valasz = Integer.parseInt(stringInt);
				if (valasz == 0)
					ok = true;
				else
					throw new Exception();

				// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
				// kivetel dobodik es azt itt kezeljuk.
				// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
				// leirjuk a kriteriumokat.
			} catch (Exception e) {
				System.out
						.println(Main.getTabok()
								+ "A bevitt parameter nem felel "
								+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
								+ Main.getTabok()
								+ "Kimentunk az ajton? Itt csak a nem az elfogadhato valasz!\n"
								+ Main.getTabok() + "0 - nem\n"
								+ Main.getTabok() + "1 - igen");
			}
		}

		System.out.println(Main.getTabok() + "Visszateresi ertek: 0 - nem");
		System.out.println(Main.getTabok() + "<- -\n");
		System.out.println("****************************************\n");
		// Hogy biztos jol adjuk vissza.
		Main.tabszam = 0;

		return false;
	}

	// Tuzko
	public void korrekcio(Jatekos j) {

		// egy valtozo amibe majd a beolvasott valaszokat taroljuk, ha a valasz
		int valasz = 0;

		// egy valtozo amivel megoldjuk az opt/alt-nal felmerulo szamozasi
		// problemat.
		int hivSz = 1;

		// ---------------------------------------------------------------
		// t1.getIrany():double elokeszitese es meghivasa
		Main.tabszam++;
		System.out.println(Main.getTabok() + "-->\n" + Main.getTabok() + "1.1."
				+ hivSz++ + " Hivott metodus: j.getIrany(): double\n");
		j.getIrany();
		System.out.println(Main.getTabok() + "<- -\n");
		Main.tabszam--;

		// ---------------------------------------------------------------
		// t1.getKoord():Pozicio elokeszitese es meghivasa
		Main.tabszam++;
		System.out.println(Main.getTabok() + "-->\n" + Main.getTabok() + "1.1."
				+ hivSz++ + " Hivott metodus: j.getKoord(): Pozicio\n");
		j.getAktKoord();
		System.out.println(Main.getTabok() + "<- -\n");
		Main.tabszam--;

		// ---------------------------------------------------------------
		// j.setAktKoord(pos) elokeszitese es meghivasa
		Main.tabszam++;
		System.out
				.println(Main.getTabok()
						+ "-->\n"
						+ Main.getTabok()
						+ "1.1."
						+ hivSz++
						+ " Hivott metodus: j.setAktKoord(pos)\n"
						+ Main.getTabok()
						+ "Vart parameterek:\n"
						+ Main.getTabok()
						+ "pos: A jatekos uj pozicioja.\n"
						+ Main.getTabok()
						+ "Pozicio tipus, egy X es egy Y koordinatabol all, amelyek egesz szamok.\n"
						+ Main.getTabok()
						+ "Adja meg az uresTilePoz parameter X komponenset!");

		// Input beolvasasanak elokeszitese
		BufferedReader reader = new BufferedReader(new InputStreamReader(
				System.in));
		;
		String sor = "inic";

		// Vart parameter bekerese a felhasznalotol.
		// -1-el inicializalunk a ciklusfeltetel miatt
		int x = -1;
		while (!(x >= 0)) {
			try {
				sor = reader.readLine();
				x = Integer.parseInt(sor);
				if (!(x >= 0)) {
					throw new Exception();
				}
			} catch (Exception e) {
				// Hibas inputot hibauzenettel es ujboli bekeressel
				// kezeljuk.
				System.out
						.println(Main.getTabok()
								+ "A bevitt ertek nem felel meg a megkoteseknek! Ezek a kovetkezok:");
				System.out.println(Main.getTabok()
						+ "Nullanal nagyobb gesz szam.");
			}
		}

		System.out.println(Main.getTabok()
				+ "Adja meg az uresTilePoz parameter Y komponenset!");
		// Vart parameter bekerese a felhasznalotol.
		int y = -1; // -1-el inicializalunk a ciklusfeltetel miatt
		while (!(y >= 0)) {
			try {
				sor = reader.readLine();
				y = Integer.parseInt(sor);
				if (!(y >= 0)) {
					throw new Exception();
				}
			} catch (Exception e) {
				// Hibas inputot hibauzenettel es ujboli bekeressel
				// kezeljuk.
				System.out
						.println(Main.getTabok()
								+ "A bevitt visszateresi ertek nem felel meg a megkoteseknek! Ezek a kovetkezok:");
				System.out.println(Main.getTabok()
						+ "Nullanal nagyobb egesz szam");
			}
		}
		Pozicio pos = new Pozicio(x, y);
		j.setAktKoord(pos);
		System.out.println(Main.getTabok() + "<- -\n");
		Main.tabszam--;

		// ---------------------------------------------------------------
		// j.setIrany(ujIrany) elokeszitese es meghivasa
		Main.tabszam++;
		System.out.println(Main.getTabok() + "-->\n" + Main.getTabok() + "1.1."
				+ hivSz++ + " Hivott metodus: j.setIrany(ujIrany)\n"
				+ Main.getTabok() + "Vart parameterek:\n" + Main.getTabok()
				+ "ujIrany: A jatekos uj pozicioja.\n" + Main.getTabok()
				+ "A jatekos mozgasi iranya radianban megadva.\n"
				+ Main.getTabok()
				+ "Barmilyen racionalis szam lehet! Tizedesvesszo: '.'\n"
				+ Main.getTabok() + "Adja meg az ujIrany parameter erteket!");

		double ujIrany = 0;
		// A felhasznaloi input ellenorzese.
		boolean ok = false;
		while (!ok) {
			try {
				BufferedReader consoleIn = new BufferedReader(
						new InputStreamReader(System.in));
				String stringInt = consoleIn.readLine();
				ujIrany = Double.parseDouble(stringInt);
				if (ujIrany >= Double.MIN_VALUE)
					ok = true;
				else
					throw new Exception();

				// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
				// kivetel dobodik es azt itt kezeljuk.
				// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
				// leirjuk a kriteriumokat.
			} catch (Exception e) {
				System.out
						.println(Main.getTabok()
								+ "A bevitt parameter nem felel "
								+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
								+ Main.getTabok()
								+ "Barmilyen racionalis szam lehet! Tizedesvesszo: '.'\n"
								+ Main.getTabok()
								+ "Adja meg az ujIrany parameter erteket!");
			}
		}
		j.setIrany(ujIrany);
		System.out.println(Main.getTabok() + "<- -\n");
		Main.tabszam--;

		System.out.println(Main.getTabok() + "A jatekos merre mozgott?");
		System.out.println(Main.getTabok() + "0 - A jatekos lefele esett.");
		System.out.println(Main.getTabok() + "1 - A jatekos felfele ugrott.");
		System.out.println(Main.getTabok()
				+ "2 - A jatekos jobbrol vagy balrol kozelitette meg a falat.");

		// A felhasznaloi input ellenorzese.
		ok = false;
		while (!ok) {
			try {
				BufferedReader consoleIn = new BufferedReader(
						new InputStreamReader(System.in));
				String stringInt = consoleIn.readLine();
				valasz = Integer.parseInt(stringInt);
				if (valasz == 0 || valasz == 1 || valasz == 2)
					ok = true;
				else
					throw new Exception();

				// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
				// kivetel dobodik es azt itt kezeljuk.
				// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
				// leirjuk a kriteriumokat.
			} catch (Exception e) {
				System.out.println(Main.getTabok()
						+ "A bevitt parameter nem felel "
						+ "meg a megkoteseknek! Ezek a kovetkezok:");
				System.out.println(Main.getTabok()
						+ "0 - A jatekos lefele esett.");
				System.out.println(Main.getTabok()
						+ "1 - A jatekos felfele ugrott.");
				System.out
						.println(Main.getTabok()
								+ "2 - A jatekos jobbrol vagy balrol kozelitette meg a falat.");
			}
		}

		// Dontunk arrol, hogy a program az alt melyik agaba keruljon bele
		// Az alapjan, hogy merre mozgott a jatekos a vizsgalat pillanataban
		// A jatekos lefele esett.
		if (valasz == 0) {
			System.out.println(Main.getTabok()
					+ "Dontes: 0 - A jatekos lefele esett.\n");

			// ---------------------------------------------------------------
			// j.setToDefaultUgras() elokeszitese es meghivasa
			Main.tabszam++;
			System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
					+ "1.1." + hivSz++
					+ " Hivott metodus: j.setToDefaultUgras()\n");
			j.setToDefaultUgras();
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;

			// A jatekos felfele ugrott.
		} else if (valasz == 1) {
			System.out.println(Main.getTabok()
					+ "Dontes: 1 - A jatekos felfele ugrott.\n");

			// ---------------------------------------------------------------
			// j.setUgras() elokeszitese es meghivasa
			Main.tabszam++;
			System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
					+ "1.1." + hivSz++ + " Hivott metodus: j.setUgras()\n");
			j.setToDefaultUgras();
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;

			// A jatekos jobbrol vagy balrol kozelitette meg a falat.
		} else {
			System.out
					.println(Main.getTabok()
							+ "Dontes: 2 - A jatekos jobbrol vagy balrol kozelitette meg a falat.");
		}
	}
}
